.TITLE DRPUT .IDENT /11.01/ ; ; Copyright (c) 1995-1999 by Mentec, Inc., U.S.A. ; All rights reserved ; ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED ; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. ; ; D. N. CUTLER 6-SEPT-73 ; ; MODIFIED FOR RSX-11M-PLUS VERSION 2 BY: ; ; P. J. BEZEREDI ; M. S. FOX ; T. M. MARTIN ; ; MODIFIED BY: ; ; B. S. MCCARTHY 23-MAY-82 11.01 ; ; BM255 -- ADD P$$RFL, P$$RTY CONDITIONALS FOR P/OS ; ; SPECIFY FLOATING POINT, POWERFAIL, AND RECEIVE AST TRAPS ; ; MACRO LIBRARY CALLS ; .MCALL HWDDF$,HDRDF$,TCBDF$,PKTDF$ HWDDF$ ;DEFINE HARDWARE BIT VALUES PKTDF$ ;DEFINE AST CODES HDRDF$ ;DEFINE TASK HEADER OFFSETS TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS ;+ ; **-$DRPER-SPECIFY PARITY ERROR AST ; ; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO EITHER RECORD THAT PARITY ERROR ; AST'S ARE DESIRED OR NOT DESIRED FOR THE ISSUING TASK. ; ; DPB FORMAT: ; ; WD. 00 -- DIC(165.),DPB SIZE(2.). ; WD. 01 -- AST ENTRY POINT ADDRESS OR ZERO. ; ; INPUTS: ; ; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK. ; R3=ADDRESS OF THE AST ADDRESS IN THE DPB. ; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. ; R5=ADDRESS OF THE TCB OF THE CURRENT TASK. ; ; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK) ; ; C=0 IF DIRECTIVE SUCCESSFULLY COMPLETED. ; DIRECTIVE STATUS OF +1 IS RETURNED. ; C=1 IF DIRECTIVE IS REJECTED. ; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF AST'S ARE ; ALREADY NOT DESIRED. ; DIRECTIVE STATUS OF 'D.RS80' IS RETURNED IF DIRECTIVE ; WAS ISSUED FROM AN AST ROUTINE. ;- .ENABL LSB .IF DF P$$RTY $DRPER::MOV #AS.PEA,R4 ;GET CODE FOR PARITY ERROR CONTRL BLK MOV #21.,-(SP) ;SET NUMBER OF AST PARAMETERS MOV #28.*2,-(SP) ;SET NUMBER OF BYTES TO ALLOCATE MOV #,-(SP) ;SET CODE FOR CONTROL BLOCK BR 10$ ;FINISH IN COMMON CODE .ENDC ; DF P$$RTY ;+ ; **-$DRREX-SPECIFIY REQUESTED EXIT AST ; ; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO EITHER RECORD THAT REQ EXIT ; AST'S ARE DESIRED OR NOT DESIRED FOR THE ISSUING TASK. ; WHEN THE AST OCCURS, IT BECOMES DESPECIFIED FOR NON PRIVILEGED TASKS. ; NON PRIVILEGED TASKS MAY NOT RESPECIFY THIS AST AFTER IT OCCURS. ; ; DPB FORMAT: ; ; WD. 00 -- DIC(167.),DPB SIZE(2.). ; WD. 01 -- AST ENTRY POINT ADDRESS OR ZERO. ; ; INPUTS: ; ; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK. ; R3=ADDRESS OF THE AST ADDRESS IN THE DPB. ; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. ; R5=ADDRESS OF THE TCB OF THE CURRENT TASK. ; ; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK) ; ; C=0 IF DIRECTIVE SUCCESSFULLY COMPLETED. ; DIRECTIVE STATUS OF +1 IS RETURNED. ; C=1 IF DIRECTIVE IS REJECTED. ; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF AST'S ARE ; ALREADY NOT DESIRED. ; DIRECTIVE STATUS OF 'D.RS80' IS RETURNED IF DIRECTIVE ; WAS ISSUED FROM AN AST ROUTINE. ;- $DRREX:: BIT #T2.REX,T.ST2(R5) ;ABORT AST ALREADY EFFECTED? BEQ 5$ ;IF EQ NO BIT #T3.PRV,T.ST3(R5) ;ISSUING TASK PRIVILEGED? BNE 50$ ;IF NE YES, TASK AT AST OR DST STATE BR 60$ ;NON-PRIV TASK, CAN'T REISSUE DIRECTIVE 5$: CLR -(SP) ;SET NUMBER OF AST PARAMETERS MOV #7.*2,-(SP) ;SET NUMBER OF BYTES TO ALLOCATE MOVB -(R3),R4 ;GET DPB SIZE BYTE CMPB (R3)+,#2 ;SREA? BEQ 7$ ;IF EQ, YES CMPB R4,#3 ;SREX? BNE 9$ ;IF NE NO ADD #2.*2,(SP) ;ADJUST NUMBER OF BYTES TO ALLOCATE AND MOV #2,2(SP) ;NUMBER OF PARAMS FOR SREX FORM 7$: MOV #,-(SP) ;SET CODE FOR CONTROL BLOCK MOV #AS.REA,R4 ;SET TYPE FOR ABORT AST BR 10$ ;FINISH IN COMMON CODE 9$: DRSTS D.RS99 ;ILLEGAL DPB LENGTH ;+ ; **-$CAAST-COMMAND ARRIVAL AST FOR CLIS ; ; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO EITHER RECORD THAT COMMAND ; ARRIVAL ASTS ARE DESIRED OR NOT DESIRED FOR THE CLI TASK ; THAT ISSUED THE DIRECTIVE. THIS ROUTINE IS ENTERED WHEN THE DRCLI ; MODULE DETECTS THIS DIRECTIVE. ; ; DPB FORMAT: ; ; WD. 01 -- DIC(173.),DPB SIZE (2.) ; WD. 02 -- AST ENTRY POINT ADDRESS OR ZERO ; ; INPUTS: ; ; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK ; R3=ADDRESS OF THE AST ADDRESS IN THE DPB ; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK ; R5=ADDRESS OF THE TCB OF THE CURRENT TASK ; ; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK) ; ; C=0 IF DIRECTIVE SUCCESSFULLY COMPLETED. ; DIRECTIVE STATUS OF +1 IS RETURNED ; C=1 IF DIRECTIVE IS REJECTED ; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF AST'S ARE ; ALREADY NOT DESIRED. ; DIRECTIVE STATUS OF 'D.RS80' IS RETURNED IF DIRECTIVE ; WAS ISSUED FROM AN AST ROUTINE. ; DIRECTIVE STATUS OF 'D.RS16' IS RETURNED IF DIRECTIVE ; WAS ISSUED BY A TASK WHICH IS NOT A CLI. ; DIRECTIVE STATUS OF 'D.RS1' IS RETURNED IF THERE ; IS INSUFFICIENT POOL TO ALLOCATE AN AST BLOCK ; DIRECTIVE STATUS OF 'D.RS99' IS RETURNED IF THE DPB ; SIZE IS ILLEGAL. ; ;- .IF DF A$$CLI $CAAST::BIT #T3.CLI,T.ST3(R5) ;IS CURRENT TASK A CLI BEQ 80$ ;IF EQ NO MOV #AS.CAA,R4 ;SET TYPE FOR CMD ARRIVAL AST MOV #1,-(SP) ;SET NUMBER OF AST PARAMETERS MOV #8.*2,-(SP) ;SET NUMBER OF BYTES TO ALLOCATE MOV #,-(SP) ;PUSH TYPE FOR CMD ARRIVAL AST BR 10$ ;FINISH IN COMMON CODE .ENDC ;A$$CLI ;+ ; **-$DRFEX-SPECIFY FLOATING POINT EXCEPTION AST ; ; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO EITHER RECORD THAT FLOATING POINT ; AST'S ARE DESIRED OR NOT DESIRED FOR THE ISSUING TASK. ; ; DPB FORMAT: ; ; WD. 00 -- DIC(111.),DPB SIZE(2.). ; WD. 01 -- AST ENTRY POINT ADDRESS OR ZERO. ; ; INPUTS: ; ; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK. ; R3=ADDRESS OF THE AST ADDRESS IN THE DPB. ; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. ; R5=ADDRESS OF THE TCB OF THE CURRENT TASK. ; ; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK) ; ; C=0 IF DIRECTIVE SUCCESSFULLY COMPLETED. ; DIRECTIVE STATUS OF +1 IS RETURNED. ; C=1 IF DIRECTIVE IS REJECTED. ; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF AST'S ARE ALREADY ; NOT DESIRED. ; DIRECTIVE STATUS OF 'D.RS80' IS RETURNED IF DIRECTIVE WAS ; ISSUED FROM AN AST ROUTINE. ;- .IF DF F$$LPP $DRFEX::TST H.FPSA(R4) ;IS TASK BUILT WITH FLOATING POINT? BEQ 60$ ;IF EQ NO ASSUME HF.FPP,100000 TST $HFMSK ;DOES THE FPP HARDWARE EXIST? BMI 60$ ;IF MI NO MOV #AS.FPA,R4 ;GET CODE FOR FLOATING POINT CONTROL BLOCK MOV #2,-(SP) ;SET NUMBER OF AST PARAMETERS MOV #9.*2,-(SP) ;SET NUMBER OF BYTES TO ALLOCATE MOV #,-(SP) ;SET CODE FOR CONTROL BLOCK BR 10$ ;FINISH IN COMMON CODE .ENDC ;+ ; **-$DRPUT-SPECIFY POWER RECOVERY AST ; ; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO EITHER RECORD THAT POWER RECOVERY ; AST'S ARE DESIRED OR NOT DESIRED FOR THE ISSUING TASK. ; ; DPB FORMAT: ; ; WD. 00 -- DIC(109.),DPB SIZE(2.). ; WD. 01 -- AST ENTRY POINT ADDRESS OR ZERO. ; ; INPUTS: ; ; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK. ; R3=ADDRESS OF THE AST ADDRESS IN THE DPB. ; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. ; R5=ADDRESS OF THE TCB OF THE CURRENT TASK. ; ; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK) ; ; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED. ; DIRECTIVE STATUS OF +1 IS RETURNED. ; C=1 IF DIRECTIVE IS REJECTED. ; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF AST'S ARE ALREADY ; NOT DESIRED. ; DIRECTIVE STATUS OF 'D.RS80' IS RETURNED IF DIRECTIVE WAS ; ISSUED FROM AN AST ROUTINE. ;- .IF DF P$$RFL $DRPUT::MOV #AS.PFA,R4 ;GET CODE FOR POWERFAIL CONTROL BLOCK CLR -(SP) ;SET NUMBER OF AST PARAMETERS MOV #7.*2,-(SP) ;SET NUMBER OF BYTES TO ALLOCATE MOV #,-(SP) ;SET CODE FOR CONTROL BLOCK BR 10$ ;FINISH IN COMMON CODE .ENDC ; DF P$$RFL ;+ ; **-$DRRRA-SPECIFY RECEIVE BY REFERENCE AST ; ; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO EITHER RECORD THAT RECEIVE ; BY REFERENCE AST'S ARE DESIRED OR NOT DESIRED FOR THE ISSUING TASK. ; ; DPB FORMAT: ; ; WD. 00 -- DIC(21.),DPB SIZE(2.). ; WD. 01 -- AST ENTRY POINT ADDRESS OR ZERO. ; ; INPUTS: ; ; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK. ; R3=ADDRESS OF THE AST ADDRESS IN THE DPB. ; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. ; R5=ADDRESS OF THE TCB OF THE CURRENT TASK. ; ; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK) ; ; C=0 IF THE DIRECTIVE IS SUCCESSFULLY COMPLETED. ; DIRECTIVE STATUS OF +1 IS RETURNED. ; C=1 IF THE DIRECTIVE IS REJECTED. ; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF AST'S ARE ; ALREADY NOT DESIRED. ; DIRECTIVE STATUS OF 'D.RS80' IS RETURNED IF DIRECTIVE ; WAS ISSUED FROM AN AST ROUTINE. ;- .IF DF P$$LAS $DRRRA::MOV #AS.RRA,R4 ;GET CODE FOR RECEIVE BY REF CONTROL BLOCK CLR -(SP) ;SET NUMBER OF AST PARAMETERS MOV #7.*2,-(SP) ;SET NUMBER OF BYTES TO ALLOCATE MOV #,-(SP) ;SET CODE FOR CONTROL BLOCK BR 10$ ;FINISH IN COMMON CODE .ENDC ;+ ; **-$DRRCV-SPECIFY RECEIVE AST ; ; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO EITHER RECORD THAT RECEIVE ; AST'S ARE DESIRED OR NOT DESIRED FOR THE ISSUING TASK. ; ; DPB FORMAT: ; ; WD. 00 -- DIC(107.),DPB SIZE(2.). ; WD. 01 -- AST ENTRY POINT ADDRESS OR ZERO. ; ; INPUTS: ; ; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK. ; R3=ADDRESS OF THE AST ADDRESS IN THE DPB. ; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. ; R5=ADDRESS OF THE TCB OF THE CURRENT TASK. ; ; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK) ; ; C=0 IF THE DIRECTIVE IS SUCCESSFULLY COMPLETED. ; DIRECTIVE STATUS OF +1 IS RETURNED. ; C=1 IF THE DIRECTIVE IS REJECTED. ; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF AST'S ARE ALREADY ; NOT DESIRED. ; DIRECTIVE STATUS OF 'D.RS80' IS RETURNED IF DIRECTIVE WAS ; ISSUED FROM AN AST ROUTINE. ;- $DRRCV::MOV #AS.RCA,R4 ;GET CODE FOR RECEIVE CONTROL BLOCK CLR -(SP) ;SET NUMBER OF AST PARAMETERS MOV #7.*2,-(SP) ;SET NUMBER OF BYTES TO ALLOCATE MOV #,-(SP) ;SET CODE FOR CONTROL BLOCK 10$: BIT #T2.AST!T2.DST,(R2) ;ISSUED FROM AST OR AST'S DISABLED? BNE 50$ ;IF NE YES .IF DF S$$LIB MOV (R3),R2 ;GET AST ADDRESS BEQ 30$ ;IF EQ AST'S NOT DESIRED CALL $CALTA ;CALCULATE TRAP ADDRESS TO STORE MOV R2,R3 ;SAVE TRAP ADDRESS .IFF MOV (R3),R3 ;GET AST ADDRESS BEQ 30$ ;IF EQ AST'S NOT DESIRED .ENDC CALL $SRAST ;SEARCH FOR A SPECIFIED AST CONTROL BLOCK BCC 20$ ;IF CC, ALREADY SET UP MOV #C.LGTH,R1 ;GET SIZE TO ALLOCATE CMP R4,#AS.PEA ;PARITY ERROR AST CONTROL BLOCK? BNE 15$ ;IF NE NO MOV #A.PLGH,R1 ;ALLOCATE A BIGGER PACKET FOR PARAMETERS 15$: CALL $ALOCB ;ALLOCATE AST CONTROL BLOCK BCS 70$ ;IF CS ALLOCATION FAILURE MOV $TKTCB,R1 ;GET TCB ADDRESS OF CURRENT TASK MOV T.SAST(R1),(R0) ;LINK NEW AST CONTROL BLOCK IN THE LIST MOV R0,T.SAST(R1) ; 20$: MOV R0,R1 ;COPY AST CONTROL BLOCK ADDRESS TST (R1)+ ;POINT TO LENGTH OF CONTROL BLOCK MOV (SP)+,(R1)+ ;SET OFFSET TO CONTROL BLOCK ADDRESS MOV (SP)+,(R1)+ ;SET NUMBER OF BYTES TO ALLOCATE MOV R3,(R1)+ ;SET AST TRAP ADDRESS MOV (SP)+,(R1) ;SET NUMBER OF PARAMETERS TO TRANSFER BR 40$ ;TAKE COMMON EXIT 30$: CALL $SRAST ;SEARCH FOR A SPECIFIED AST CONTROL BLOCK BCS 60$ ;IF CS, AST'S ALREADY NOT DESIRED CMP R4,#AS.REA ;IS THIS A REQUESTED EXIT AST? BNE 35$ ;IF NE NO BIC #T2.REX,T.ST2(R5) ;CLEAR REQUESTED EXIT AST FLAG 35$: MOV (R0),(R1) ;REMOVE CONTROL BLOCK FROM THE LIST MOV #C.LGTH,R1 ;GET LENGTH OF BLOCK TO DEALLOCATE CMP R4,#AS.PEA ;PARITY ERROR AST CONTROL BLOCK? BNE 37$ ;IF NE NO MOV #A.PLGH,R1 ;GET PACKET SIZE 37$: CALL $DEACB ;DEALLOCATE AST CONTROL BLOCK 40$: DRSTS +1 ;RETURN DIRECTIVE STATUS OF +1 50$: DRSTS D.RS80 ;SET DIRECTIVE STATUS 60$: DRSTS D.RS8 ;SET DIRECTIVE STATUS 70$: DRSTS D.RS1 ;SET DIRECTIVE STATUS .IF DF A$$CLI 80$: DRSTS D.RS16 ;SET DIRECTIVE STATUS .ENDC .DSABL LSB .END